/**
 * 给定一个大小为 n 的数组 nums ，返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
 * 你可以假设数组是非空的，并且给定的数组总是存在多数元素。
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function (nums) {
  let map = new Map()
  for (let i = 0; i < nums.length; i++) {
    let num = map.get(nums[i])
    if (num) {
      map.set(nums[i], num + 1)
    } else {
      map.set(nums[i], 1)
    }
  }

  let res = -1
  map.forEach((v, k) => {
    if (v > nums.length / 2) {
      res = k
    }
  })
  return res
};

var majorityElement2 = function (nums) {
  let map = new Map()
  for (let i = 0; i < nums.length; i++) {
    let num = map.get(nums[i])
    if (num) {
      if (num + 1 > nums.length / 2) {
        return nums[i]
      }
      map.set(nums[i], num + 1)
    } else {
      map.set(nums[i], 1)
    }
  }

  return nums[0]
}


var majorityElement3 = function (nums) {
  let count = 0
  let p
  for (var num of nums) {
    if (count == 0) {
      p = num
    }
    if (p == num) {
      count++
    } else {
      count--
    }
  }

  return p
}


let nums = [3, 2, 3]
const num = majorityElement(nums)
console.log(num)